#pragma once

#include <AVUIDependencyObject.h>
#include <AVUIIInputElement.h>

namespace AVUI {

class ContentElement : public DependencyObject, public IInputElement
{
friend class FrameworkObject;
friend class FocusManager;
friend class DeferredElementTreeState;
friend class ContentOperations;
friend class InputElement;

public:

    DECLARE_ELEMENT(ContentElement, DependencyObject);

    void AddHandler(RoutedEvent* pRoutedEvent, Delegate* pEventHandler) { };
    void RemoveHandler(RoutedEvent* pRoutedEvent, Delegate* pEventHandler) { };
    void RaiseEvent(RoutedEventArgs* pArgs) { };
    void AddToEventRoute(EventRoute* pRoute, RoutedEventArgs* e) { };

    virtual bool Focus() AVUI_OVERRIDE { return false; }
    virtual Object* get_Object() AVUI_OVERRIDE { return this; }
    virtual bool get_IsKeyboardFocusWithin() AVUI_OVERRIDE { return false; }

    virtual bool BuildRouteCore(EventRoute* pRoute, RoutedEventArgs* pArgs) { return false; }
    virtual TRefCountedPtr<Object> AdjustEventSource(RoutedEventArgs* pArgs) { return NULL; }

    DependencyObject* GetUIParent() { return GetUIParent(false); }
    DependencyObject* GetUIParent(bool continuePastVisualTree) { return NULL; }

protected:

    virtual DependencyObject* GetUIParentCore() { return NULL; }

    void OnContentParentChanged(DependencyObject* pOldParent) {} 

private:
    DependencyObject* m_pParent;

};


}; // namespace AVUI
